
/*******************************************************************************
 * Copyleft (c) 2021 Kcode
 *
 * @file    main.c
 * @brief   ALSA裸板程序的主函数文件
 * @author  K
 * @version 0.0.1
 * @date    2021-07-22
 * @license MulanPSL-1.0
 *
 * 文件修改历史：
 * <时间>       | <版本>    | <作者>  | <描述>
 * 2021-08-05   | v0.0.1    | Kcode   | ALSA裸板程序的主函数文件
 * -----------------------------------------------------------------------------
 ******************************************************************************/

#include <stdio.h>
#include "serial.h"
#include "i2c.h"

unsigned char at24cxx_read(unsigned char address);
void at24cxx_write(unsigned char address, unsigned char data);

/*!
 * @brief  Step7：为该设备申请若干个缓冲区，分配头部信息
 *         参考：uvc_alloc_buffers()
 * @return  正数：返回成功分配内存的大小，负数：分配失败
 */
int main()
{
    char c;
    char str[200];
    int i;
	int address;
	int data;
    int volume = 50; /**! 音量：0~100 */

    /*!
     * 串口初始化：波特率115200，8N1(8个数据位，无校验位，1个停止位)
     */
    uart0_init();   

    /*!
     * 读取wav文件，从sdram中读出
     */
    read_wav();

    /*!
     * 进行视频播放
     */
    while (1)
    {
menu:        
        printf("\r\n##### Sound Menu #####\r\n");
        printf("[J] JZ2440\n\r");
        printf("[M] MINI2440\n\r");
        printf("[T] TQ2440\n\r");
        printf("Enter your selection: ");

        c = getc();
        printf("%c\n\r", c);

        /*!
         * 根据不同的裸板进行对应的裸板初始化
         */
        switch (c)
        {
            case 'J':
            case 'j':
            {
                /* machine init */
                jz2440_init();
                
                /* codec init */
                wm8976_init();
                break;
            }
            
            case 'm':
            case 'M':
            {
                /* machine init */
                mini2440_init();

                /* codec init */
                uda1341_init();
                break;
            }

            case 't':
            case 'T':
            {
                /* machine init */
                tq2440_init();

                /* codec init */
                uda1341_init();
                break;
            }

            default:
            {
                goto menu;
            }
        }        

        /*!
         * 初始化视频数据传输的iis与dma传输
         */
        iis_init();
        dma_init();

        /*!
         * 开始视频数据传输(视频播放)
         */
        dma_start();
        iis_start();

        /*!
         * 调整音量
         */
        printf("\r\n##### Operate Menu #####\r\n");
        printf("[-] volume down\n\r");
        printf("[+] volume up\n\r");
        printf("[Q] Quit\n\r");
        printf("Cur volume: %03d", volume);
        while (1)
        {
            c = getc();
            if (c == 'q' || c == 'Q')
            {
                printf("%c\n\r", c);
                break;
            }
            else if (c == '-')
            {
                if (volume > 0)
                    volume--;
                set_volume(volume);
            }
            else if (c == '+')
            {
                if (volume < 100)
                    volume++;
                set_volume(volume);
            }
            printf("\b\b\b%03d", volume);
        }
        
            
    }
    
    return 0;
}
